#define _CRT_SECURE_NO_WARNINGS 
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 9;
//ll a[N], b[N], dp1[N][3], dp2[N][3];
//ll get(ll x)
//{
//	if (x == 0)
//	{
//		return 0;
//	}
//	else if (x == 2)
//	{
//		return 1;
//	}
//	else if (x == 4)
//	{
//		return 2;
//	}
//}
//int main()
//{
//	ll n = 0;
//	cin >> n;
//	memset(dp1, -0x3f3f3f, sizeof(dp1));
//	memset(dp2, -0x3f3f3f, sizeof(dp2));
//	for (ll i = 1; i <= n; i++) cin >> a[i];
//	for (ll i = 1; i <= n; i++) cin >> b[i];
//	for (ll i = 0; i < 3; i++) dp2[0][i] = 0;
//	
//	for (ll i = 1; i <= n; i++)
//	{
//		for (ll j = 0; j < 3; j++)
//		{
//			dp1[i][j] = dp1[i - 1][j];
//			dp2[i][j] = dp2[i - 1][j];
//		}
//		ll x = a[i];
//		ll ma = -0x3f3f3f;
//		set<ll>st;
//		while (x)
//		{
//			ll digit = x % 10;
//			if (digit == 0 || digit == 2 || digit == 4)
//			{
//				st.insert(get(digit));
//			}
//			x /= 10;
//		}
//		if (!st.empty())
//		{
//			for (auto k : st)
//			{
//				ma = max(ma, dp2[i - 1][k]);
//			}
//			for (auto k : st)
//			{
//				dp1[i][k] = max(ma + 1, dp1[i][k]);
//			}
//		}
//		ll y = b[i];
//		ma = -0x3f3f3f;
//		st.clear();
//		while (y)
//		{
//			ll digit = y % 10;
//			if (digit == 0 || digit == 2 || digit == 4)
//			{
//				st.insert(get(digit));
//			}
//			y /= 10;
//		}
//		if (!st.empty())
//		{
//			for (auto k : st)
//			{
//				ma = max(ma, dp1[i - 1][k]);
//			}
//			for (auto k : st)
//			{
//				dp2[i][k] = max(ma + 1, dp2[i][k]);
//			}
//		}
//	}
//	ll ans = 0;
//	for (ll i = 0; i < 3; i++)
//	{
//		ans = max(ans, max(dp1[n][i], dp2[n][i]));
//	}
//	cout << ans << endl;
//	return 0;
//}
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//ll n, m, K;
//ll matrix[120][120];
//ll dp[120][120][2][7];
//bool ok(ll x, ll y)
//{
//	if (x > n || y > m)
//	{
//		return false;
//	}
//	else if (matrix[x][y] == '.')
//	{
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//ll dfs(ll x, ll y, ll tag, ll t)
//{
//	ll cnt = 0;
//	if(!ok(x,y)) return 0;
//	if (x == n && y == m) return 1;
//	if (dp[x][y][tag][t]) return dp[x][y][tag][t];
//	if (t < K)
//	{
//		cnt += dfs(x, y + 1, 0, tag == 0 ? t : t + 1);
//		cnt += dfs(x + 1, y, 1, tag == 1 ? t : t + 1);
//	}
//	else if (t == K)
//	{
//		if (tag == 0)
//		{
//			cnt += dfs(x, y + 1, 0, t);
//		}
//		else if (tag == 1)
//		{
//			cnt += dfs(x + 1, y, 1, t);
//		}
//	}
//	dp[x][y][tag][t] = cnt;
//	return cnt;
//}
//int main()
//{
//	ll ans = 0;
//	cin >> n >> m >> K;
//	for (ll i = 1; i <= n; i++)
//	{
//		for (ll j = 1; j <= m; j++)
//		{
//			cin >> matrix[i][j];
//		}
//	}
//	memset(dp, 0, sizeof(dp));
//	if(ok(1,2)) ans += dfs(1, 2, 0, 0);
//	if(ok(2,1)) ans += dfs(2, 1, 1, 0);
//	cout << ans << endl;
//	return 0;
//}
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll n, m, k;
const ll N = 1e6 + 1010l;
ll t[110], p[110];
ll dp[N];
int main()
{
	cin >> n >> m;
	for (ll i = 1; i <= m; i++)
	{
		cin >> t[i] >> p[i];
	}
	cin >> k;
	n += k;
	for (ll i = 1; i <= m; i++)
	{
		t[i] += k;
	}
	for (ll i = 1; i <= n; i++)
	{
		dp[i] = dp[i - 1];
		for (ll j = 1; j <= n; j++)
		{
			if (i - t[j] >= 0)
			{
				dp[i] = max(dp[i], dp[i - t[j] + p[j]);
			}
		}
	}
	cout << dp[m] << endl;
	return 0;
}